//### This file created by BYACC 1.8(/Java extension  1.14)
//### Java capabilities added 7 Jan 97, Bob Jamison
//### Updated : 27 Nov 97  -- Bob Jamison, Joe Nieten
//###           01 Jan 98  -- Bob Jamison -- fixed generic semantic constructor
//###           01 Jun 99  -- Bob Jamison -- added Runnable support
//###           06 Aug 00  -- Bob Jamison -- made state variables class-global
//###           03 Jan 01  -- Bob Jamison -- improved flags, tracing
//###           16 May 01  -- Bob Jamison -- added custom stack sizing
//###           04 Mar 02  -- Yuval Oren  -- improved java performance, added options
//###           14 Mar 02  -- Tomas Hurka -- -d support, static initializer workaround
//### Please send bug reports to tom@hukatronic.cz
//### static char yysccsid[] = "@(#)yaccpar	1.8 (Berkeley) 01/20/90";



package gluck.sintactico;



//#line 8 "gluck.y"
	import java.io.*;
	import gluck.lexico.Token;
	import gluck.lexico.Yylex;
	import gluck.lexico.Yytoken;
	import gluck.sintactico.tree.*;
	import gluck.sintactico.symbolTable.SymbolTable;
//#line 24 "Parser.java"




public class Parser
             implements ParserTokens
{

boolean yydebug;        //do I want debug output?
int yynerrs;            //number of errors so far
int yyerrflag;          //was there an error?
int yychar;             //the current working character

//########## MESSAGES ##########
//###############################################################
// method: debug
//###############################################################
void debug(String msg)
{
  if (yydebug)
    System.out.println(msg);
}

//########## STATE STACK ##########
final static int YYSTACKSIZE = 500;  //maximum stack size
int statestk[] = new int[YYSTACKSIZE]; //state stack
int stateptr;
int stateptrmax;                     //highest index of stackptr
int statemax;                        //state when highest index reached
//###############################################################
// methods: state stack push,pop,drop,peek
//###############################################################
final void state_push(int state)
{
  try {
		stateptr++;
		statestk[stateptr]=state;
	 }
	 catch (ArrayIndexOutOfBoundsException e) {
     int oldsize = statestk.length;
     int newsize = oldsize * 2;
     int[] newstack = new int[newsize];
     System.arraycopy(statestk,0,newstack,0,oldsize);
     statestk = newstack;
     statestk[stateptr]=state;
  }
}
final int state_pop()
{
  return statestk[stateptr--];
}
final void state_drop(int cnt)
{
  stateptr -= cnt; 
}
final int state_peek(int relative)
{
  return statestk[stateptr-relative];
}
//###############################################################
// method: init_stacks : allocate and prepare stacks
//###############################################################
final boolean init_stacks()
{
  stateptr = -1;
  val_init();
  return true;
}
//###############################################################
// method: dump_stacks : show n levels of the stacks
//###############################################################
void dump_stacks(int count)
{
int i;
  System.out.println("=index==state====value=     s:"+stateptr+"  v:"+valptr);
  for (i=0;i<count;i++)
    System.out.println(" "+i+"    "+statestk[i]+"      "+valstk[i]);
  System.out.println("======================");
}


//########## SEMANTIC VALUES ##########
//public class ParserVal is defined in ParserVal.java


String   yytext;//user variable to return contextual strings
ParserVal yyval; //used to return semantic vals from action routines
ParserVal yylval;//the 'lval' (result) I got from yylex()
ParserVal valstk[];
int valptr;
//###############################################################
// methods: value stack push,pop,drop,peek.
//###############################################################
void val_init()
{
  valstk=new ParserVal[YYSTACKSIZE];
  yyval=new ParserVal();
  yylval=new ParserVal();
  valptr=-1;
}
void val_push(ParserVal val)
{
  if (valptr>=YYSTACKSIZE)
    return;
  valstk[++valptr]=val;
}
ParserVal val_pop()
{
  if (valptr<0)
    return new ParserVal();
  return valstk[valptr--];
}
void val_drop(int cnt)
{
int ptr;
  ptr=valptr-cnt;
  if (ptr<0)
    return;
  valptr = ptr;
}
ParserVal val_peek(int relative)
{
int ptr;
  ptr=valptr-relative;
  if (ptr<0)
    return new ParserVal();
  return valstk[ptr];
}
//#### end semantic value section ####
public final static short YYERRCODE=256;
final static short yylhs[] = {                           -1,
    0,   32,   32,   31,   33,   30,   30,   30,   30,   29,
   29,   27,   26,   28,   25,   25,   24,   23,   23,   22,
   22,   21,   21,   21,   21,   21,   20,   20,   19,   19,
   18,   18,   17,   17,   16,   15,   15,   14,   14,   13,
   13,   13,   12,   12,   12,   12,   12,   12,   12,   12,
   11,   11,   11,   11,   11,   11,   11,   11,   10,    9,
    9,    8,    8,    7,    7,    6,    5,    5,    4,    4,
    3,    2,    2,    1,    1,
};
final static short yylen[] = {                            2,
    1,    0,    2,    5,    1,    0,    1,    3,    2,    1,
    1,    2,    1,    2,    1,    3,    4,    0,    3,    0,
    2,    6,    4,    2,    1,    1,    0,    4,    0,    1,
    0,    2,    1,    1,    3,    1,    3,    1,    1,    3,
    2,    1,    3,    1,    1,    1,    1,    1,    1,    2,
    1,    1,    1,    1,    1,    1,    1,    1,    4,    0,
    1,    1,    3,    1,    1,    5,    1,    4,    0,    2,
    7,    3,    1,    0,    2,
};
final static short yydefred[] = {                         2,
    0,    0,    5,    3,    0,    0,    0,    0,    0,   15,
    0,    0,    0,    0,    0,    0,   10,   13,   20,   11,
    4,   18,    0,   16,    0,   12,    0,    0,    0,    0,
   14,   65,   64,   25,    0,   21,   26,    0,   44,   45,
   46,   47,   48,    0,    0,    0,   49,   42,    0,    0,
    0,    0,    0,   24,   19,    0,   41,    0,    0,   57,
   58,   56,   51,   52,   53,   54,   55,    0,    0,   27,
    0,    0,    0,    0,    0,    0,   43,    0,   40,    0,
    0,    0,   59,    0,    0,    0,    0,   34,   32,   23,
    0,    0,   67,   66,    0,    0,    0,   28,    0,   36,
    0,   39,    0,   70,    0,   22,   35,    0,    0,    0,
    0,   73,   71,   37,   68,   75,    0,   72,
};
final static short yydgoto[] = {                          1,
  112,  113,   32,   93,   94,   33,   34,   71,   72,   47,
   68,   48,   99,  100,  101,  102,   89,   76,   85,   53,
   36,   25,   27,   10,   11,   19,   20,   26,   21,   12,
    4,    2,    5,
};
final static short yysindex[] = {                         0,
    0, -727,    0,    0,   24, -414, -499, -710,   41,    0,
  -42,  -38,   65, -188, -710, -710,    0,    0,    0,    0,
    0,    0,   65,    0,  -64,    0,   22,    5,   74,   32,
    0,    0,    0,    0,   56,    0,    0,   23,    0,    0,
    0,    0,    0,   78,  -39,    5,    0,    0,  -19,    5,
 -179,    5,    7,    0,    0,   40,    0,   -8,    3,    0,
    0,    0,    0,    0,    0,    0,    0,  -39,   -1,    0,
   79,   81,   15,    5,  -13,   71,    0, -498,    0, -473,
    7,    5,    0,   15,   44,  -13,   15,    0,    0,    0,
    5,    3,    0,    0,    3,   75,   15,    0,   15,    0,
  -33,    0,    6,    0, -500,    0,    0,  -13, -498,    3,
    3,    0,    0,    0,    0,    0, -469,    0,
};
final static short yyrindex[] = {                         0,
    0,  139,    0,    0,    0,    0,  -34,    0,    0,    0,
  -29,    0,   -4,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    4,    0,    0,    0,  -12,    0,    0,   12,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,  -37,    0,    0,    0,    0,    0,    0,
    0,   99,   83,    0,    0,  -28,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  102,    0,   35,   51,    0,    0,    0,  -59,    0,    0,
   83,    0,    0,   52,    0,    0,   87,    0,    0,    0,
    0,    0,    0,    0,    0,    0,   39,    0,  -32,    0,
    0,    0,    0,    0,  -56,    0,    0,    0,  -59,    0,
    0,    0,    0,    0,    0,    0,  -56,    0,
};
final static short yygindex[] = {                         0,
   30,    0,    0,    0,   42,    0,    0,    0,    0,  123,
    0,   36,   50,   45,    0,   77,    0,   68,    0,   31,
    0,    0,    0,  134,   62,    0,   25,    0,    0,    0,
    0,    0,    0,
};
final static int YYTABLESIZE=916;
static short yytable[];
static { yytable();}
static void yytable(){
yytable = new short[]{                         27,
   46,   16,    8,   27,   27,   27,   27,   27,   50,   27,
  108,   38,   50,   50,   50,   50,   50,   67,   50,   45,
   17,   27,   65,   63,    6,   64,   46,   66,   67,    7,
   50,   17,   77,   65,   63,   67,   64,   45,   66,   80,
   65,   63,   67,   64,   46,   66,   17,   65,   63,   37,
   64,   67,   66,   27,    9,   27,   65,   63,   18,   64,
   31,   66,    8,   69,   50,   69,   74,   75,   74,   13,
   27,   52,   27,    3,   56,   62,   23,   49,   62,   63,
   57,    6,   63,   78,   18,   27,    7,   27,    6,   51,
    9,  107,   38,    7,   50,   58,   50,   74,   14,   69,
   81,   73,   27,   79,   91,   92,  110,  111,   16,   86,
   17,   22,   38,   50,   54,   55,  104,   52,    9,  105,
   70,   83,   82,   84,   87,   18,    8,  109,   18,   90,
   74,   97,   95,  106,  116,  117,   98,  110,    1,   60,
  103,   31,   61,   29,   30,   33,  118,   35,   96,   24,
  115,   88,  114,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    9,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,   39,   40,   41,   42,   43,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,   39,   40,   41,
   42,   43,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,   39,   40,   41,   42,   43,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   15,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,   17,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,   28,    0,    0,    0,
   29,   69,    0,    0,   74,   69,    0,    0,   74,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,   27,    0,    0,    0,    0,    0,
    0,    0,    0,   50,    0,    0,    0,    0,    0,    0,
    0,    0,   59,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   27,   27,    0,    0,    0,    0,    0,
    0,    0,   50,   50,    0,    0,    0,    0,    0,    0,
    0,   60,   61,    0,    0,    0,    0,    0,    0,    0,
    0,    0,   60,   61,    0,    0,    0,    0,    0,   60,
   61,    0,    0,    0,    0,    0,   60,   61,    0,    0,
    0,    0,    0,    0,    0,   60,   61,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,   30,    0,    0,    0,
    0,   69,    0,    0,   74,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,   44,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,   44,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,   44,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,    0,   27,    0,    0,    0,    0,    0,    0,
    0,    0,   50,    0,    0,    0,    0,    0,    0,    0,
    0,   62,    0,    0,    0,    0,    0,    0,    0,    0,
    0,    0,   62,    0,    0,    0,    0,    0,    0,   62,
    0,    0,    0,    0,    0,    0,   62,    0,    0,    0,
    0,    0,    0,    0,    0,   62,
};
}
static short yycheck[];
static { yycheck(); }
static void yycheck() {
yycheck = new short[] {                         37,
   40,   44,  502,   41,   42,   43,   44,   45,   37,   47,
   44,   44,   41,   42,   43,   44,   45,   37,   47,   33,
   59,   59,   42,   43,   59,   45,   40,   47,   37,   59,
   59,   44,   41,   42,   43,   37,   45,   33,   47,   41,
   42,   43,   37,   45,   40,   47,   59,   42,   43,   25,
   45,   37,   47,   91,   59,   93,   42,   43,  123,   45,
  125,   47,   59,  123,   93,  125,  123,   61,  125,    8,
   59,   40,   61,  801,   44,   41,   15,   28,   44,   41,
   45,   58,   44,   59,  123,  123,  501,  125,  123,   58,
  801,  125,  125,  123,  123,   46,  125,   91,   58,   50,
   70,   52,   91,   68,  603,  604,  607,  608,   44,  123,
  123,  300,   91,   40,   59,   93,   92,   40,  123,   95,
  300,   41,   44,   74,   75,  123,  123,  103,  123,   59,
   91,   82,  606,   59,  110,  111,   93,  607,    0,   41,
   91,   59,   41,   93,   93,   59,  117,   25,   81,   16,
  109,   75,  108,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  801,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  401,  402,  403,  404,  405,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  401,  402,  403,
  404,  405,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  401,  402,  403,  404,  405,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  502,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  502,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  601,   -1,   -1,   -1,
  605,  601,   -1,   -1,  601,  605,   -1,   -1,  605,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,  602,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  602,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  602,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  701,  702,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  701,  702,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  701,  702,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  701,  702,   -1,   -1,   -1,   -1,   -1,  701,
  702,   -1,   -1,   -1,   -1,   -1,  701,  702,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  701,  702,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,  801,   -1,   -1,   -1,
   -1,  801,   -1,   -1,  801,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  801,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  801,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  801,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,   -1,  901,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  901,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,  901,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
   -1,   -1,  901,   -1,   -1,   -1,   -1,   -1,   -1,  901,
   -1,   -1,   -1,   -1,   -1,   -1,  901,   -1,   -1,   -1,
   -1,   -1,   -1,   -1,   -1,  901,
};
}
final static short YYFINAL=1;
final static short YYMAXTOKEN=901;
final static String yyname[] = {
"end-of-file",null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,"'!'",null,null,null,"'%'",null,null,"'('","')'","'*'","'+'",
"','","'-'",null,"'/'",null,null,null,null,null,null,null,null,null,null,"':'",
"';'",null,"'='",null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,"'['",null,"']'",null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,"'{'",null,"'}'",null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,"TYPE","INTEGER","REAL","STRING","BOOLEAN",null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,"INTEGER_NUM",
"REAL_NUM","STRING_TEXT","TRUE","FALSE",null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,"FUNCTION","START_OUTPUT_PARAM",null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
"IF","THEN","ELSEIF","ELSE","WHILE","LOOP","IFQUIT","IFNEVER","QUIT",null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,"EQUAL_COMP","UNEQUAL_COMP",null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,"ID",null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,
null,null,null,null,null,"LOGIC_OP",
};
final static String yyrule[] = {
"$accept : start",
"start : program",
"program :",
"program : program function",
"function : func_name ':' FUNCTION parameters function2",
"func_name : ID",
"parameters :",
"parameters : params",
"parameters : params START_OUTPUT_PARAM params",
"parameters : START_OUTPUT_PARAM params",
"function2 : ';'",
"function2 : block",
"block : openBlock block2",
"openBlock : '{'",
"block2 : lines '}'",
"params : param",
"params : params ',' param",
"param : ID ':' TYPE param_array",
"param_array :",
"param_array : param_array '[' ']'",
"lines :",
"lines : lines line",
"line : ID ':' TYPE array asignation ';'",
"line : ID array asignation ';'",
"line : invocation ';'",
"line : sequence",
"line : block",
"array :",
"array : array '[' dim ']'",
"dim :",
"dim : exp",
"asignation :",
"asignation : '=' asignation2",
"asignation2 : exp",
"asignation2 : init_array",
"init_array : '{' values '}'",
"values : value",
"values : values ',' value",
"value : exp",
"value : init_array",
"exp : exp operator factor",
"exp : '!' factor",
"exp : factor",
"factor : '(' exp ')'",
"factor : INTEGER_NUM",
"factor : REAL_NUM",
"factor : STRING_TEXT",
"factor : TRUE",
"factor : FALSE",
"factor : invocation",
"factor : ID array",
"operator : '+'",
"operator : '-'",
"operator : '*'",
"operator : '/'",
"operator : '%'",
"operator : LOGIC_OP",
"operator : EQUAL_COMP",
"operator : UNEQUAL_COMP",
"invocation : ID '(' inv_param ')'",
"inv_param :",
"inv_param : inv_param2",
"inv_param2 : exp",
"inv_param2 : inv_param2 ',' exp",
"sequence : seq_if",
"sequence : seq_while",
"seq_if : IF exp THEN block seq_elseif",
"seq_elseif : seq_else",
"seq_elseif : ELSEIF exp block seq_elseif",
"seq_else :",
"seq_else : ELSE block",
"seq_while : WHILE '(' exp ')' LOOP block seq_ifnever",
"seq_ifnever : IFNEVER block seq_ifquit",
"seq_ifnever : seq_ifquit",
"seq_ifquit :",
"seq_ifquit : IFQUIT block",
};

//#line 590 "gluck.y"

  	protected Yylex lexer;
	protected Yytoken yytoken;
	public String func;
	public String varname;
	static SymbolTable st;
	static Tree tree;

private int yylex () {
    	int yyl_return = -1;
	try {
 
      	yylval = new ParserVal(0);
		yytoken= lexer.yylex();

	    	if(yytoken.m_index!= Token.EOF.getValue())
     		{
    			yyl_return = yytoken.m_index;
    		}
     		else
    		{
     			yyl_return =0;
	     		System.out.println("Se termino el archivo!!");
    		}
    }
    catch (IOException e) {
    	System.err.println("IO error :"+e);
    }
    	return yyl_return;
}


public void yyerror (String error) {
	System.err.println ("Error: " + error);
}


public Parser(Reader r) {
	lexer = new Yylex(r, this);
}
  
public void printSymbolTable(){
	st.printTable();
}

public void setYylval(ParserVal yylval) {
	this.yylval = yylval;
}
public ParserVal getYylval() {
	return yylval;
}
    



//#line 588 "Parser.java"
//###############################################################
// method: yylexdebug : check lexer state
//###############################################################
void yylexdebug(int state,int ch)
{
String s=null;
  if (ch < 0) ch=0;
  if (ch <= YYMAXTOKEN) //check index bounds
     s = yyname[ch];    //now get it
  if (s==null)
    s = "illegal-symbol";
  debug("state "+state+", reading "+ch+" ("+s+")");
}





//The following are now global, to aid in error reporting
int yyn;       //next next thing to do
int yym;       //
int yystate;   //current parsing state from state table
String yys;    //current token string


//###############################################################
// method: yyparse : parse input and execute indicated items
//###############################################################
int yyparse()
{
boolean doaction;
  init_stacks();
  yynerrs = 0;
  yyerrflag = 0;
  yychar = -1;          //impossible char forces a read
  yystate=0;            //initial state
  state_push(yystate);  //save it
  val_push(yylval);     //save empty value
  while (true) //until parsing is done, either correctly, or w/error
    {
    doaction=true;
    if (yydebug) debug("loop"); 
    //#### NEXT ACTION (from reduction table)
    for (yyn=yydefred[yystate];yyn==0;yyn=yydefred[yystate])
      {
      if (yydebug) debug("yyn:"+yyn+"  state:"+yystate+"  yychar:"+yychar);
      if (yychar < 0)      //we want a char?
        {
        yychar = yylex();  //get next token
        if (yydebug) debug(" next yychar:"+yychar);
        //#### ERROR CHECK ####
        if (yychar < 0)    //it it didn't work/error
          {
          yychar = 0;      //change it to default string (no -1!)
          if (yydebug)
            yylexdebug(yystate,yychar);
          }
        }//yychar<0
      yyn = yysindex[yystate];  //get amount to shift by (shift index)
      if ((yyn != 0) && (yyn += yychar) >= 0 &&
          yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
        {
        if (yydebug)
          debug("state "+yystate+", shifting to state "+yytable[yyn]);
        //#### NEXT STATE ####
        yystate = yytable[yyn];//we are in a new state
        state_push(yystate);   //save it
        val_push(yylval);      //push our lval as the input for next rule
        yychar = -1;           //since we have 'eaten' a token, say we need another
        if (yyerrflag > 0)     //have we recovered an error?
           --yyerrflag;        //give ourselves credit
        doaction=false;        //but don't process yet
        break;   //quit the yyn=0 loop
        }

    yyn = yyrindex[yystate];  //reduce
    if ((yyn !=0 ) && (yyn += yychar) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
      {   //we reduced!
      if (yydebug) debug("reduce");
      yyn = yytable[yyn];
      doaction=true; //get ready to execute
      break;         //drop down to actions
      }
    else //ERROR RECOVERY
      {
      if (yyerrflag==0)
        {
        yyerror("syntax error");
        yynerrs++;
        }
      if (yyerrflag < 3) //low error count?
        {
        yyerrflag = 3;
        while (true)   //do until break
          {
          if (stateptr<0)   //check for under & overflow here
            {
            yyerror("stack underflow. aborting...");  //note lower case 's'
            return 1;
            }
          yyn = yysindex[state_peek(0)];
          if ((yyn != 0) && (yyn += YYERRCODE) >= 0 &&
                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
            {
            if (yydebug)
              debug("state "+state_peek(0)+", error recovery shifting to state "+yytable[yyn]+" ");
            yystate = yytable[yyn];
            state_push(yystate);
            val_push(yylval);
            doaction=false;
            break;
            }
          else
            {
            if (yydebug)
              debug("error recovery discarding state "+state_peek(0)+" ");
            if (stateptr<0)   //check for under & overflow here
              {
              yyerror("Stack underflow. aborting...");  //capital 'S'
              return 1;
              }
            state_pop();
            val_pop();
            }
          }
        }
      else            //discard this token
        {
        if (yychar == 0)
          return 1; //yyabort
        if (yydebug)
          {
          yys = null;
          if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
          if (yys == null) yys = "illegal-symbol";
          debug("state "+yystate+", error recovery discards token "+yychar+" ("+yys+")");
          }
        yychar = -1;  //read another
        }
      }//end error recovery
    }//yyn=0 loop
    if (!doaction)   //any reason not to proceed?
      continue;      //skip action
    yym = yylen[yyn];          //get count of terminals on rhs
    if (yydebug)
      debug("state "+yystate+", reducing "+yym+" by rule "+yyn+" ("+yyrule[yyn]+")");
    if (yym>0)                 //if count of rhs not 'nil'
      yyval = val_peek(yym-1); //get current semantic value
    switch(yyn)
      {
//########## USER-SUPPLIED ACTIONS ##########
case 3:
//#line 135 "gluck.y"
{
				tree.addNode(val_peek(0).obj);
			}
break;
case 4:
//#line 140 "gluck.y"
{
				Node node= new Node("Function");
				node.addNode(val_peek(4).sval);
				node.addNode(":");
				node.addNode("function");
				node.addNode(val_peek(1).obj);
				node.addNode(val_peek(0).obj);
						
				yyval.obj= node;
				
			}
break;
case 5:
//#line 153 "gluck.y"
{st.addFunction(val_peek(0).sval);}
break;
case 6:
//#line 156 "gluck.y"
{	yyval.obj=null;	}
break;
case 7:
//#line 159 "gluck.y"
{
				Node node=new Node("Params_In");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 8:
//#line 167 "gluck.y"
{
				Node node=new Node("Parameters");
				node.addNode(val_peek(2).obj);
				node.addNode("->");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 9:
//#line 177 "gluck.y"
{
				Node node= new Node("Params_Out");
				node.addNode("->");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 10:
//#line 186 "gluck.y"
{	yyval.obj= new Node(";");	}
break;
case 11:
//#line 188 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 12:
//#line 192 "gluck.y"
{
					
					yyval.obj=val_peek(0).obj; 		/* AAAAAAAAARRRRRRRRRRRRRRRREEEEEEEEEEGGGGGGGGGLLLLLLLLLLLAAAAAAAAAAAAARRRRRRRRRR? */
				}
break;
case 13:
//#line 198 "gluck.y"
{	st.startBlock();	}
break;
case 14:
//#line 202 "gluck.y"
{	
				
				st.endBlock();
				
				Node node= new Node("Block");
				node.addNode("{");
				node.addNode(val_peek(1).obj);
				node.addNode("}");
				
				yyval.obj=node;
			}
break;
case 15:
//#line 215 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 16:
//#line 217 "gluck.y"
{
				Node node= new Node("Params");
				node.addNode(val_peek(2).obj);
				node.addNode(",");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 17:
//#line 228 "gluck.y"
{
				st.addNode(val_peek(3).sval,val_peek(1).sval);  
				
				Node node= new Node("Param");
				node.addNode(val_peek(3).sval);
				node.addNode(":");
				node.addNode(val_peek(1).sval);
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;				
			}
break;
case 18:
//#line 241 "gluck.y"
{	yyval.obj=null;	}
break;
case 19:
//#line 243 "gluck.y"
{
				Node node= new Node("Param_Array");
				node.addNode(val_peek(2).obj);
				node.addNode("[");
				node.addNode("]");
				
				yyval.obj=node;
			}
break;
case 20:
//#line 255 "gluck.y"
{	yyval.obj=null;	}
break;
case 21:
//#line 257 "gluck.y"
{
				Node node= new Node("Lines");
				node.addNode(val_peek(1).obj);
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 22:
//#line 267 "gluck.y"
{	
				st.addNode(val_peek(5).sval,val_peek(3).sval);  
				Node node= new Node("Line");
				node.addNode(val_peek(5).sval);
				node.addNode(":");
				node.addNode(val_peek(3).obj);
				node.addNode(val_peek(2).obj);
				node.addNode(val_peek(1).obj);
				
				yyval.obj= node;
			}
break;
case 23:
//#line 279 "gluck.y"
{	
				Node node= new Node("Line");
				node.addNode(val_peek(3).sval);
				node.addNode(val_peek(2).obj);
				node.addNode(";");
				
				yyval.obj= node;
			}
break;
case 24:
//#line 288 "gluck.y"
{
				Node node= new Node("Line");
				node.addNode(val_peek(1).obj);
				node.addNode(";");
				
				yyval.obj= node;
			}
break;
case 25:
//#line 296 "gluck.y"
{
				yyval.obj= val_peek(0).obj;
			}
break;
case 26:
//#line 300 "gluck.y"
{			
				yyval.obj= val_peek(0).obj;
			}
break;
case 27:
//#line 309 "gluck.y"
{	yyval.obj=null;	}
break;
case 28:
//#line 311 "gluck.y"
{
				Node node= new Node("Array");
				node.addNode(val_peek(3).obj);
				node.addNode(" [ ");
				node.addNode(val_peek(1).obj);
				node.addNode(" ] ");
				
				yyval.obj=node;
			}
break;
case 29:
//#line 322 "gluck.y"
{	yyval.obj=null;	}
break;
case 30:
//#line 324 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 31:
//#line 327 "gluck.y"
{	yyval.obj=null;	}
break;
case 32:
//#line 329 "gluck.y"
{
				Node node= new Node("Asignation");
				node.addNode("=");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 33:
//#line 338 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 34:
//#line 340 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 35:
//#line 343 "gluck.y"
{
				Node node= new Node("Init_Array");
				node.addNode("{");
				node.addNode(val_peek(1).obj);
				node.addNode("}");
				
				yyval.obj=node;
			}
break;
case 36:
//#line 353 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 37:
//#line 355 "gluck.y"
{	
				Node node= new Node("Values");
				node.addNode(val_peek(2).obj);
				node.addNode(",");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 38:
//#line 365 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 39:
//#line 367 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 40:
//#line 371 "gluck.y"
{	
				Node node= new Node("Exp");
				node.addNode(val_peek(2).obj);
				node.addNode(val_peek(1).obj);
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 41:
//#line 380 "gluck.y"
{	
				Node node= new Node("Exp");
				node.addNode("!");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 42:
//#line 388 "gluck.y"
{	
				Node node= new Node("Exp");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 43:
//#line 398 "gluck.y"
{	
				Node node= new Node("Factor");
				node.addNode("(");
				node.addNode(val_peek(1).obj);
				node.addNode(")");
				
				yyval.obj=node;
			}
break;
case 44:
//#line 408 "gluck.y"
{	
				Node node= new Node("Factor");
				node.addNode(val_peek(0).sval);
				
				yyval.obj=node;
			}
break;
case 45:
//#line 415 "gluck.y"
{	
				Node node= new Node("Factor");
				node.addNode(val_peek(0).sval);
				
				yyval.obj=node;
			}
break;
case 46:
//#line 422 "gluck.y"
{	
				Node node= new Node("Factor");
				node.addNode(val_peek(0).sval);
				
				yyval.obj=node;
			}
break;
case 47:
//#line 429 "gluck.y"
{	
				Node node= new Node("Factor");
				node.addNode(val_peek(0).sval);
				
				yyval.obj=node;
			}
break;
case 48:
//#line 436 "gluck.y"
{	
				Node node= new Node("Factor");
				node.addNode(val_peek(0).sval);
				
				yyval.obj=node;
			}
break;
case 49:
//#line 443 "gluck.y"
{	
				Node node= new Node("Factor");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 50:
//#line 451 "gluck.y"
{
				Node node= new Node("Factor");
				node.addNode(val_peek(1).sval);
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			
			}
break;
case 51:
//#line 461 "gluck.y"
{	yyval.obj= new Node("+");	}
break;
case 52:
//#line 463 "gluck.y"
{	yyval.obj= new Node("-");	}
break;
case 53:
//#line 465 "gluck.y"
{	yyval.obj= new Node("*");	}
break;
case 54:
//#line 467 "gluck.y"
{	yyval.obj= new Node("/");	}
break;
case 55:
//#line 469 "gluck.y"
{	yyval.obj= new Node("%");	}
break;
case 56:
//#line 471 "gluck.y"
{	yyval.obj= new Node(val_peek(0).sval);	}
break;
case 57:
//#line 473 "gluck.y"
{	yyval.obj= new Node(val_peek(0).sval);	}
break;
case 58:
//#line 475 "gluck.y"
{	yyval.obj= new Node(val_peek(0).sval);	}
break;
case 59:
//#line 478 "gluck.y"
{
				Node node= new Node("Invocation");
				node.addNode(val_peek(3).sval);
				node.addNode("(");
				node.addNode(val_peek(1).obj);
				node.addNode(")");
				
				yyval.obj=node;			
			}
break;
case 60:
//#line 489 "gluck.y"
{	yyval.obj=null;	}
break;
case 61:
//#line 491 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 62:
//#line 494 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 63:
//#line 496 "gluck.y"
{	
				Node node= new Node("Inv_Param");
				node.addNode(val_peek(2).obj);
				node.addNode(",");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 64:
//#line 507 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 65:
//#line 509 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 66:
//#line 512 "gluck.y"
{	
				Node node= new Node("Seq_If");
				node.addNode("if");
				node.addNode(val_peek(3).obj);
				node.addNode("then");
				node.addNode(val_peek(1).obj);
				node.addNode(val_peek(0).obj);			
				
				yyval.obj=node;
			}
break;
case 67:
//#line 524 "gluck.y"
{	yyval.obj=val_peek(0).obj;	}
break;
case 68:
//#line 527 "gluck.y"
{
				Node node= new Node("Seq_ElseIf");
				node.addNode("elseif");
				node.addNode(val_peek(2).obj);
				node.addNode(val_peek(1).obj);
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 69:
//#line 538 "gluck.y"
{	yyval.obj=null;	}
break;
case 70:
//#line 540 "gluck.y"
{	
				Node node= new Node("Seq_Else");
				node.addNode("else");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 71:
//#line 549 "gluck.y"
{
				Node node= new Node("Seq_While");
				node.addNode("while");
				node.addNode("(");
				node.addNode(val_peek(4).obj);
				node.addNode(")");
				node.addNode("loop");
				node.addNode(val_peek(1).obj);
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 72:
//#line 563 "gluck.y"
{
				Node node= new Node("Seq_If_Never");
				node.addNode("ifnever");
				node.addNode(val_peek(1).obj);
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
case 73:
//#line 572 "gluck.y"
{
				yyval.obj=val_peek(0).obj;
			}
break;
case 74:
//#line 577 "gluck.y"
{	yyval.obj=null;	}
break;
case 75:
//#line 579 "gluck.y"
{
				Node node= new Node("Seq_If_Quit");
				node.addNode("ifquit");
				node.addNode(val_peek(0).obj);
				
				yyval.obj=node;
			}
break;
//#line 1282 "Parser.java"
//########## END OF USER-SUPPLIED ACTIONS ##########
    }//switch
    //#### Now let's reduce... ####
    if (yydebug) debug("reduce");
    state_drop(yym);             //we just reduced yylen states
    yystate = state_peek(0);     //get new state
    val_drop(yym);               //corresponding value drop
    yym = yylhs[yyn];            //select next TERMINAL(on lhs)
    if (yystate == 0 && yym == 0)//done? 'rest' state and at first TERMINAL
      {
      if (yydebug) debug("After reduction, shifting from state 0 to state "+YYFINAL+"");
      yystate = YYFINAL;         //explicitly say we're done
      state_push(YYFINAL);       //and save it
      val_push(yyval);           //also save the semantic value of parsing
      if (yychar < 0)            //we want another character?
        {
        yychar = yylex();        //get next character
        if (yychar<0) yychar=0;  //clean, if necessary
        if (yydebug)
          yylexdebug(yystate,yychar);
        }
      if (yychar == 0)          //Good exit (if lex returns 0 ;-)
         break;                 //quit the loop--all DONE
      }//if yystate
    else                        //else not done yet
      {                         //get next state and push, for next yydefred[]
      yyn = yygindex[yym];      //find out where to go
      if ((yyn != 0) && (yyn += yystate) >= 0 &&
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
        yystate = yytable[yyn]; //get new state
      else
        yystate = yydgoto[yym]; //else go to new defred
      if (yydebug) debug("after reduction, shifting from state "+state_peek(0)+" to state "+yystate+"");
      state_push(yystate);     //going again, so push state & val...
      val_push(yyval);         //for next action
      }
    }//main loop
  return 0;//yyaccept!!
}
//## end of method parse() ######################################



//## run() --- for Thread #######################################
/**
 * A default run method, used for operating this parser
 * object in the background.  It is intended for extending Thread
 * or implementing Runnable.  Turn off with -Jnorun .
 */
public void run()
{
  yyparse();
}
//## end of method run() ########################################



//## Constructors ###############################################
/**
 * Default constructor.  Turn off with -Jnoconstruct .

 */
public Parser()
{
  //nothing to do
}


/**
 * Create a parser, setting the debug to true or false.
 * @param debugMe true for debugging, false for no debug.
 */
public Parser(boolean debugMe)
{
  yydebug=debugMe;
}
//###############################################################



}
//################### END OF CLASS ##############################
